/**
 * @param {number[]} nums
 * @return {number[][]}
 */
// 78.子集的变体，难点是怎么去重？
// 去重：[1, 2, 2]
// 1：[] [1]
// 1 2：在1的基础上join一个2 [] [1] [2] [1, 2]
// 1 2 2：由于1的基础上已经join过2了，再join就会重复，所以只在新增的上join 2。
var subsetsWithDup = function(nums) {
    let updateNums = 1 // 默认更新次数为1，即[[]] => [[], [nums[0]]]新增了一个[nums[0]]
    // 对nums排序
    nums.sort()
    let ans = [[], [nums[0]]];
    for(let i = 1; i < nums.length; i++) {
        let temp = JSON.parse(JSON.stringify(ans))
        if(nums[i] === nums[i - 1]) {
            for(let j = ans.length - updateNums; j < ans.length; j++) {
                ans[j].push(nums[i])
                temp.push(ans[j])
            }
        } else {
            updateNums = 0
            for(let j = 0; j < ans.length; j++) {
                ans[j].push(nums[i])
                temp.push(ans[j])
                updateNums++
            }
        }
        ans = temp
    }
    return ans
};
console.log(subsetsWithDup([1]));
console.log(subsetsWithDup([1, 1]));
console.log(subsetsWithDup([1, 1, 1]));
console.log(subsetsWithDup([1, 2, 2]));